
// 组织架构的 接口 部门

type idType = number | string

/**
 * 后端的组织架构
 */
export interface IOrganization {
  id: idType,
  deptName: string, // 部门名称
  parentId: idType, // 上级部门ID
  level: number, // 层级
  path: string, // 父ID集合，“,”号分割
  sort: number, // 同一个父级里的先后顺序
  sortAll: number, // 部门全排列
  [id: idType]: any // 其他字段
}

/**
 * 前端的组织架构，照顾后端需要的数据
 */
export interface IOrganizationTree {
  id: idType,
  label: string, // 部门名称
  children?: IOrganizationTree[] // 子部门
}

/**
 * 状态
 */
export interface IOrganizationState {
  orgTree: IOrganizationTree[], // 组织机构，绑定 tree
  orgList: IOrganization[], // 后端需要的结构
  orgObject: { // 对象的形式保存
    [id: idType]: IOrganization
  },
  currentOrg: {
    id: idType, // 当前选择的部门ID
    num: 1, // 添加用的序号
    sortAll: 1, // 类型转换时用的排序
    info: IOrganizationTree // 当前选择的部门信息
  },
  listToTree?: () => void,
  treeToList?: () => void
}